﻿#pragma once

#include "common.h"

class CRandom
{
public:
	CRandom(void);
	~CRandom(void);

	//http://www.cplusplus.com/forum/beginner/7445/
	// Generate a random number between 0 and 1
	// return a uniform number in [0,1].
	double unifRand()
	{
		return rand()/double(RAND_MAX);
	}
	// Generate a random number in a real interval.
	// param a one end point of the interval
	// param b the other end of the interval
	// return a inform rand numberin [a,b].
	float unifRand(float a, float b)
	{
		return (b-a)*unifRand() + a;
	}
	// Generate a random integer between 1 and a given value.
	// param n the largest value 
	// return a uniform random value in [1,...,n]
	long unifRand(long n)
	{
    
		if (n < 0) n = -n;
		if (n==0) return 0;
		/* There is a slight error in that this code can produce a return value of n+1
		**
		**  return long(unifRand()*n) + 1;
		*/
		//Fixed code
		long guard = (long) (unifRand() * n) +1;
		return (guard > n)? n : guard;
	}
	// Reset the random number generator with the system clock.
	void seed()
	{
		srand(time(0));
	}
};

